home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Linux / Kubuntu 8.10 / kubuntu-8.10-desktop-i386.iso / casper / filesystem.squashfs / usr / lib / python2.5 / bsddb / dbrecio.pyc (.txt) < prev    next >
Python Compiled Bytecode  |  2008-10-29  |  5KB  |  136 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.5)
  3.  
  4. """
  5. File-like objects that read from or write to a bsddb record.
  6.  
  7. This implements (nearly) all stdio methods.
  8.  
  9. f = DBRecIO(db, key, txn=None)
  10. f.close()           # explicitly release resources held
  11. flag = f.isatty()   # always false
  12. pos = f.tell()      # get current position
  13. f.seek(pos)         # set current position
  14. f.seek(pos, mode)   # mode 0: absolute; 1: relative; 2: relative to EOF
  15. buf = f.read()      # read until EOF
  16. buf = f.read(n)     # read up to n bytes
  17. f.truncate([size])  # truncate file at to at most size (default: current pos)
  18. f.write(buf)        # write at current position
  19. f.writelines(list)  # for line in list: f.write(line)
  20.  
  21. Notes:
  22. - fileno() is left unimplemented so that code which uses it triggers
  23.   an exception early.
  24. - There's a simple test set (see end of this file) - not yet updated
  25.   for DBRecIO.
  26. - readline() is not implemented yet.
  27.  
  28.  
  29. From:
  30.     Itamar Shtull-Trauring <itamar@maxnm.com>
  31. """
  32. import errno
  33. import string
  34.  
  35. class DBRecIO:
  36.     
  37.     def __init__(self, db, key, txn = None):
  38.         self.db = db
  39.         self.key = key
  40.         self.txn = txn
  41.         self.len = None
  42.         self.pos = 0
  43.         self.closed = 0
  44.         self.softspace = 0
  45.  
  46.     
  47.     def close(self):
  48.         if not self.closed:
  49.             self.closed = 1
  50.             del self.db
  51.             del self.txn
  52.         
  53.  
  54.     
  55.     def isatty(self):
  56.         if self.closed:
  57.             raise ValueError, 'I/O operation on closed file'
  58.         
  59.         return 0
  60.  
  61.     
  62.     def seek(self, pos, mode = 0):
  63.         if self.closed:
  64.             raise ValueError, 'I/O operation on closed file'
  65.         
  66.         if mode == 1:
  67.             pos = pos + self.pos
  68.         elif mode == 2:
  69.             pos = pos + self.len
  70.         
  71.         self.pos = max(0, pos)
  72.  
  73.     
  74.     def tell(self):
  75.         if self.closed:
  76.             raise ValueError, 'I/O operation on closed file'
  77.         
  78.         return self.pos
  79.  
  80.     
  81.     def read(self, n = -1):
  82.         if self.closed:
  83.             raise ValueError, 'I/O operation on closed file'
  84.         
  85.         if n < 0:
  86.             newpos = self.len
  87.         else:
  88.             newpos = min(self.pos + n, self.len)
  89.         dlen = newpos - self.pos
  90.         r = self.db.get(self.key, txn = self.txn, dlen = dlen, doff = self.pos)
  91.         self.pos = newpos
  92.         return r
  93.  
  94.     __fixme = '\n    def readline(self, length=None):\n        if self.closed:\n            raise ValueError, "I/O operation on closed file"\n        if self.buflist:\n            self.buf = self.buf + string.joinfields(self.buflist, \'\')\n            self.buflist = []\n        i = string.find(self.buf, \'\n\', self.pos)\n        if i < 0:\n            newpos = self.len\n        else:\n            newpos = i+1\n        if length is not None:\n            if self.pos + length < newpos:\n                newpos = self.pos + length\n        r = self.buf[self.pos:newpos]\n        self.pos = newpos\n        return r\n\n    def readlines(self, sizehint = 0):\n        total = 0\n        lines = []\n        line = self.readline()\n        while line:\n            lines.append(line)\n            total += len(line)\n            if 0 < sizehint <= total:\n                break\n            line = self.readline()\n        return lines\n    '
  95.     
  96.     def truncate(self, size = None):
  97.         if self.closed:
  98.             raise ValueError, 'I/O operation on closed file'
  99.         
  100.         if size is None:
  101.             size = self.pos
  102.         elif size < 0:
  103.             raise IOError(errno.EINVAL, 'Negative size not allowed')
  104.         elif size < self.pos:
  105.             self.pos = size
  106.         
  107.         self.db.put(self.key, '', txn = self.txn, dlen = self.len - size, doff = size)
  108.  
  109.     
  110.     def write(self, s):
  111.         if self.closed:
  112.             raise ValueError, 'I/O operation on closed file'
  113.         
  114.         if not s:
  115.             return None
  116.         
  117.         if self.pos > self.len:
  118.             self.buflist.append('\x00' * (self.pos - self.len))
  119.             self.len = self.pos
  120.         
  121.         newpos = self.pos + len(s)
  122.         self.db.put(self.key, s, txn = self.txn, dlen = len(s), doff = self.pos)
  123.         self.pos = newpos
  124.  
  125.     
  126.     def writelines(self, list):
  127.         self.write(string.joinfields(list, ''))
  128.  
  129.     
  130.     def flush(self):
  131.         if self.closed:
  132.             raise ValueError, 'I/O operation on closed file'
  133.         
  134.  
  135.  
  136.